ãããã¬ãŒã·ã§ã³ãã¹ãã®ããã®PythonããŒã¹ã®ãšã¯ã¹ããã€ãéçºãã¬ãŒã ã¯ãŒã¯ã®äœæã«ã€ããŠèª¬æããŸããã¢ãŒããã¯ãã£ãã¢ãžã¥ãŒã«ãããã³å®è·µçãªå®è£ ã«ã€ããŠåŠã³ãŸãã
Pythonãããã¬ãŒã·ã§ã³ãã¹ãïŒãšã¯ã¹ããã€ãéçºãã¬ãŒã ã¯ãŒã¯ã®æ§ç¯
ãµã€ããŒã»ãã¥ãªãã£ã®åéã§ã¯ããããã¬ãŒã·ã§ã³ãã¹ãã¯ãã·ã¹ãã ããã³ã¢ããªã±ãŒã·ã§ã³å ã®è匱æ§ãç¹å®ãã軜æžããäžã§éèŠãªåœ¹å²ãæãããŸããMetasploitã®ãããªå€æ°ã®æ¢è£œã®ããŒã«ãšãã¬ãŒã ã¯ãŒã¯ãååšããŸããããšã¯ã¹ããã€ãéçºã®åºç€ãšãªãååãçè§£ããã«ã¹ã¿ã ããŒã«ãäœæããããšã§ãéåžžã«è²Žéãªç¥èãšæè»æ§ãåŸãããŸããPythonã¯ããã®è±å¯ãªã©ã€ãã©ãªãšäœ¿ãããããããã«ã¹ã¿ã ãšã¯ã¹ããã€ãéçºãã¬ãŒã ã¯ãŒã¯ãæ§ç¯ããããã®åªããèšèªãšããŠåœ¹ç«ã¡ãŸãããã®èšäºã§ã¯ããã®ãããªãã¬ãŒã ã¯ãŒã¯ã®äœæã«é¢ããäž»èŠãªæŠå¿µãšå®è·µçãªæé ã«ã€ããŠèª¬æããŸãã
ã«ã¹ã¿ã ãšã¯ã¹ããã€ãéçºãã¬ãŒã ã¯ãŒã¯ãæ§ç¯ããçç±
Metasploitã®ãããªç¢ºç«ããããã¬ãŒã ã¯ãŒã¯ã¯å¹ åºãæ©èœãæäŸããŸãããç¬èªã®ãã¬ãŒã ã¯ãŒã¯ãæ§ç¯ããããšã«ã¯ããã€ãã®å©ç¹ããããŸãã
- ããæ·±ãçè§£ïŒåã³ã³ããŒãã³ããæåããæ§ç¯ããããšã§ããšã¯ã¹ããã€ãéçºã®ååã®çè§£ãæ·±ãŸããŸãã
- ã«ã¹ã¿ãã€ãºïŒç¹å®ã®ããŒãºãšç°å¢ã«åãããŠãã¬ãŒã ã¯ãŒã¯ã調æŽããç¬èªã®è匱æ§èª¿æ»ã«é©å¿ãããŸãã
- æè»æ§ïŒæ¢åã®ãã¬ãŒã ã¯ãŒã¯ã§ã¯å©çšã§ããªãå¯èœæ§ã®ããã«ã¹ã¿ã ã¢ãžã¥ãŒã«ãšããŒã«ãçµ±åããŸãã
- åŠç¿æ©äŒïŒãœãããŠã§ã¢èšèšãã»ãã¥ãªãã£ã®ååãããã³ããã°ã©ãã³ã°æè¡ã®å®è·µçãªåŠç¿çµéšãæäŸããŸãã
- åé¿çïŒã«ã¹ã¿ã ããŒã«ã¯ãããäžè¬çãªããŒã«ãããªã¬ãŒããå¯èœæ§ã®ããäžéšã®æ€åºã¡ã«ããºã ãåé¿ããå¯èœæ§ãé«ããªããŸãã
ãã¬ãŒã ã¯ãŒã¯ã¢ãŒããã¯ãã£
é©åã«èšèšããããšã¯ã¹ããã€ãéçºãã¬ãŒã ã¯ãŒã¯ã¯ãã¢ãžã¥ãŒã«åŒã§æ¡åŒµå¯èœã§ããå¿ èŠããããŸããææ¡ãããã¢ãŒããã¯ãã£ã次ã«ç€ºããŸãã
- ã³ã¢ãšã³ãžã³ïŒãã¬ãŒã ã¯ãŒã¯ã®åæåãã¢ãžã¥ãŒã«ã®ããŒããããã³å®è¡ãããŒãåŠçããŸãã
- ã¢ãžã¥ãŒã«ç®¡çïŒã¢ãžã¥ãŒã«ã®ããŒããã¢ã³ããŒããããã³ç·šæã管çããŸãã
- è匱æ§ããŒã¿ããŒã¹ïŒCVE IDã説æãããã³é¢é£ãããšã¯ã¹ããã€ããå«ããæ¢ç¥ã®è匱æ§ã«é¢ããæ å ±ãä¿åããŸãã
- ãšã¯ã¹ããã€ãã¢ãžã¥ãŒã«ïŒç¹å®ã®è匱æ§ã«å¯Ÿããåã ã®ãšã¯ã¹ããã€ããå«ãŸããŠããŸãã
- ãã€ããŒãã¢ãžã¥ãŒã«ïŒããŸããŸãªã¢ãŒããã¯ãã£ããã³ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã çšã®ãã€ããŒãïŒã·ã§ã«ã³ãŒãïŒãçæããŸãã
- ãšã³ã³ãŒãã¢ãžã¥ãŒã«ïŒæ€åºãåé¿ããããã«ãã€ããŒãããšã³ã³ãŒãããŸãã
- ãã¡ãžã³ã°ã¢ãžã¥ãŒã«ïŒãã¡ãžã³ã°ææ³ã«ããèªåèåŒ±æ§æ€åºãå¯èœã«ããŸãã
- ãŠãŒãã£ãªãã£ã¢ãžã¥ãŒã«ïŒãããã¯ãŒã¯éä¿¡ããã¡ã€ã«æäœãããŒã¿å€æãªã©ã®äŸ¿å©ãªæ©èœãæäŸããŸãã
- ãããã°ã€ã³ã¿ãŒãã§ãŒã¹ïŒãšã¯ã¹ããã€ãã®åæãšæ¹è¯ã®ããã«ãGDBãImmunity Debuggerãªã©ã®ãããã¬ãŒãšçµ±åããŸãã
ç°å¢ã®ã»ããã¢ãã
ã³ãŒãã«å ¥ãåã«ãå¿ èŠãªããŒã«ãã€ã³ã¹ããŒã«ãããŠããããšã確èªããŠãã ããã
- Python 3ïŒãã¬ãŒã ã¯ãŒã¯ã®äž»èŠãªããã°ã©ãã³ã°èšèªã
- ä»®æ³ç°å¢ïŒvenvïŒïŒãã¬ãŒã ã¯ãŒã¯ã®äŸåé¢ä¿ãåé¢ããŸãã
python3 -m venv venv - PipïŒPythonã®ããã±ãŒãžã€ã³ã¹ããŒã©ãŒã
pip install -r requirements.txtïŒäŸåé¢ä¿ãå«ãrequirements.txtãã¡ã€ã«ãäœæããŸãïŒ - ãããã¬ãŒïŒGDBïŒLinuxïŒãImmunity DebuggerïŒWindowsïŒã
- éã¢ã»ã³ãã©ïŒIDA ProãGhidraã
- ãããã¯ãŒã¯ããŒã«ïŒWiresharkãtcpdumpã
requirements.txtã®äŸïŒ
requests
scapy
colorama
ã³ã¢ãšã³ãžã³ã®å®è£
ã³ã¢ãšã³ãžã³ã¯ãã¬ãŒã ã¯ãŒã¯ã®äžæ žã§ããåæåãã¢ãžã¥ãŒã«ã®ããŒããããã³å®è¡ãããŒãåŠçããŸããåºæ¬çãªäŸã次ã«ç€ºããŸãã
```python import os import importlib from colorama import Fore, Style class Framework: def __init__(self): self.modules = {} self.module_path = "modules" def load_modules(self): print(Fore.GREEN + "[*] Loading modules..." + Style.RESET_ALL) for filename in os.listdir(self.module_path): if filename.endswith(".py") and filename != "__init__.py": module_name = filename[:-3] try: module = importlib.import_module(f"{self.module_path}.{module_name}") for name, obj in module.__dict__.items(): if isinstance(obj, type) and hasattr(obj, 'run'): self.modules[module_name] = obj() print(Fore.GREEN + f"[+] Loaded module: {module_name}" + Style.RESET_ALL) except Exception as e: print(Fore.RED + f"[-] Failed to load module {module_name}: {e}" + Style.RESET_ALL) def run_module(self, module_name, options): if module_name in self.modules: try: self.modules[module_name].run(options) except Exception as e: print(Fore.RED + f"[-] Error running module {module_name}: {e}" + Style.RESET_ALL) else: print(Fore.RED + f"[-] Module {module_name} not found." + Style.RESET_ALL) def list_modules(self): print(Fore.BLUE + "[*] Available modules:" + Style.RESET_ALL) for module_name in self.modules: print(Fore.BLUE + f" - {module_name}" + Style.RESET_ALL) if __name__ == "__main__": framework = Framework() framework.load_modules() framework.list_modules() #Example: framework.run_module("example_exploit", {"target": "192.168.1.100", "port": 80}) ```ãã®ã³ãŒãã¯ã以äžã瀺ããŠããŸãã
modulesãã£ã¬ã¯ããªããã¢ãžã¥ãŒã«ãããŒãããŸãã- ãªãã·ã§ã³ã䜿çšããŠç¹å®ã®ã¢ãžã¥ãŒã«ãå®è¡ããŸãã
- 䜿çšå¯èœãªã¢ãžã¥ãŒã«ãäžèŠ§è¡šç€ºããŸãã
ãšã¯ã¹ããã€ãã¢ãžã¥ãŒã«ã®äœæ
ãšã¯ã¹ããã€ãã¢ãžã¥ãŒã«ã«ã¯ãç¹å®ã®è匱æ§ãæªçšããããã®ããžãã¯ãå«ãŸããŠããŸããç°¡åãªãšã¯ã¹ããã€ãã¢ãžã¥ãŒã«ã®äŸã次ã«ç€ºããŸãã
ã¡ã€ã³ãã¬ãŒã ã¯ãŒã¯ã¹ã¯ãªãããšåããã£ã¬ã¯ããªã«ãmodulesããšãããã£ã¬ã¯ããªãäœæããŸãã
ãmodulesããã£ã¬ã¯ããªå
ã«ãexample_exploit.pyãšãããã¡ã€ã«ãäœæããŸãã
ãã®ã¢ãžã¥ãŒã«ã¯ã以äžã瀺ããŠããŸãã
runã¡ãœãããæã€ExampleExploitã¯ã©ã¹ãå®çŸ©ããŸãã- ã¿ãŒã²ãããšããŒãããªãã·ã§ã³ãšããŠååŸããŸãã
- åçŽãªãããã¡ãŒãªãŒããŒãããŒãã€ããŒããéä¿¡ããŸããïŒæ³šïŒããã¯ç°¡ç¥åãããäŸã§ããããã¹ãŠã®ã·ããªãªã§æ©èœãããšã¯éããŸãããåžžã«è²¬ä»»ãæã£ãŠå«ççã«ãšã¯ã¹ããã€ãããã¹ãããŠãã ãããïŒ
ãã€ããŒãã®çæ
ãã€ããŒãã¯ããšã¯ã¹ããã€ããæåããåŸã«ã¿ãŒã²ããã·ã¹ãã ã§å®è¡ãããã·ã§ã«ã³ãŒããŸãã¯ã³ãã³ãã§ããPythonã¯ãstructãpwntoolsã®ãããªã©ã€ãã©ãªãæäŸããŠããã€ããŒããçæããŸãã
pwntoolsã䜿çšããäŸïŒpip install pwntoolsã䜿çšããŠã€ã³ã¹ããŒã«ããŸãïŒïŒ
ãã®ã³ãŒãã¯ã以äžã瀺ããŠããŸãã
shellcraftã䜿çšããŠã/bin/shãå®è¡ããããã®ã·ã§ã«ã³ãŒããçæããŸããasmã䜿çšããŠã·ã§ã«ã³ãŒããã¢ã»ã³ãã«ããŸãã
èåŒ±æ§æ€åºã®ããã®ãã¡ãžã³ã°
ãã¡ãžã³ã°ã¯ãããã°ã©ã ã«äžæ£ãªåœ¢åŒãŸãã¯äºæããªãå
¥åãæäŸããããšã«ãããè匱æ§ãæ€åºããææ³ã§ããPythonã¯ãAFLïŒAmerican Fuzzy LopïŒãã€ã³ãã£ã³ã°ãradamsaã®ãããªã©ã€ãã©ãªãæäŸããŠãã¡ãžã³ã°ãè¡ããŸãã
åçŽãªãã¡ãžã³ã°ã¢ãããŒãã䜿çšããäŸïŒ
```python import socket import random def fuzz(target, port): try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((target, port)) # Generate a random string of bytes payload = bytearray(random.randbytes(random.randint(100, 2000))) s.send(payload) s.recv(1024) # Attempt to receive data; potential crash here s.close() return True # Survived the fuzzing attempt except Exception as e: print(f"Crash detected: {e}") return False # Likely crashed if __name__ == '__main__': TARGET = "192.168.1.100" #Replace with your target IP PORT = 80 #Replace with your target Port print(f"Fuzzing {TARGET}:{PORT}") for i in range(1000): print(f"Attempt {i+1}") if not fuzz(TARGET, PORT): break ```ãã®ã³ãŒãã¯ã以äžã瀺ããŠããŸãã
- ã¿ãŒã²ããã«æ¥ç¶ããŸãã
- ã©ã³ãã ãªãã€ãã®ãã€ããŒããéä¿¡ããŸãã
- ã¯ã©ãã·ã¥ãç£èŠããŸãã
ãã€ããŒãã®ãšã³ã³ãŒã
ãã€ããŒãããšã³ã³ãŒããããšããŠã€ã«ã¹å¯ŸçãœãããŠã§ã¢ããã³äŸµå ¥æ€ç¥ã·ã¹ãã ã«ããæ€åºãåé¿ã§ããŸããäžè¬çãªãšã³ã³ãŒãææ³ã«ã¯ãXORãšã³ã³ãŒããBase64ãšã³ã³ãŒããããã³ããªã¢ãŒãã£ãã¯ã³ãŒãçæãå«ãŸããŸãã
XORãšã³ã³ãŒãã®äŸïŒ
```python def xor_encode(payload, key): encoded = bytearray() for i in range(len(payload)): encoded.append(payload[i] ^ key) return bytes(encoded) # Example usage payload = b"This is my payload" key = 0x41 encoded_payload = xor_encode(payload, key) print(f"Original payload: {payload}") print(f"Encoded payload: {encoded_payload}") decoded_payload = xor_encode(encoded_payload, key) # XOR with the same key to decode print(f"Decoded payload: {decoded_payload}") ```ãããã°ãšåæ
ãããã°ã¯ããšã¯ã¹ããã€ãã®ä»çµã¿ãçè§£ãããšã©ãŒãç¹å®ããããã«äžå¯æ¬ ã§ããGDBïŒLinuxïŒãImmunity DebuggerïŒWindowsïŒã®ãããªãããã¬ãŒã䜿çšãããšãã³ãŒããã¹ãããã¹ã«ãŒããã¡ã¢ãªãæ€æ»ããããã°ã©ã ã®åäœãåæã§ããŸãã
äž»èŠãªãããã°ææ³ïŒ
- ãã¬ãŒã¯ãã€ã³ãã®èšå®ïŒã³ãŒãå ã®ç¹å®ã®ãã€ã³ãã§å®è¡ãäžæåæ¢ããŸãã
- ã³ãŒãã®ã¹ãããã¹ã«ãŒïŒã³ãŒãã1è¡ãã€å®è¡ããŸãã
- ã¡ã¢ãªã®æ€æ»ïŒã¡ã¢ãªã¢ãã¬ã¹ã®å 容ã調ã¹ãŸãã
- ã¬ãžã¹ã¿ã®åæïŒCPUã¬ãžã¹ã¿ã®å€ã衚瀺ããŸãã
ããšãã°ãImmunity Debuggerã䜿çšããå ŽåïŒ
- Immunity Debuggerãã¿ãŒã²ããããã»ã¹ã«ã¢ã¿ããããŸãã
- ãšã¯ã¹ããã€ããããªã¬ãŒããããšäºæ³ãããåœä»€ã«ãã¬ãŒã¯ãã€ã³ããèšå®ããŸãã
- ãšã¯ã¹ããã€ããå®è¡ãããã¬ãŒã¯ãã€ã³ãã«ããããããšãã®ããã°ã©ã ã®ç¶æ ã芳å¯ããŸãã
è匱æ§ããŒã¿ããŒã¹ãšã®çµ±å
National Vulnerability DatabaseïŒNVDïŒãExploit-DBã®ãããªè匱æ§ããŒã¿ããŒã¹ãšçµ±åãããšãæ¢ç¥ã®è匱æ§ã«é¢é£ãããšã¯ã¹ããã€ããèŠã€ããããã»ã¹ãèªååã§ããŸããrequestsã©ã€ãã©ãªã䜿çšããŠãããã®ããŒã¿ããŒã¹ãã¯ãšãªã§ããŸãã
NVD APIã®ã¯ãšãªã®äŸïŒããã«ã¯NVD APIãçè§£ããããã«å¿ããŠURLãšè§£æããžãã¯ã調æŽããå¿ èŠããããŸããã¬ãŒãå¶éãæ€èšããŠãã ããïŒïŒ
```python import requests def search_nvd(cve_id): url = f"https://services.nvd.nist.gov/rest/json/cves/2.0?cveId={cve_id}" try: response = requests.get(url) response.raise_for_status() # Raise HTTPError for bad responses (4xx or 5xx) data = response.json() if data['totalResults'] > 0: print(f"Vulnerability Description: {data['vulnerabilities'][0]['cve']['descriptions'][0]['value']}") else: print("No results found for " + cve_id) except requests.exceptions.RequestException as e: print(f"Error querying NVD: {e}") if __name__ == '__main__': CVE_ID = "CVE-2023-0001" # Replace with an actual CVE ID search_nvd(CVE_ID) ```å«ççèæ ®äºé ãšæ³çã³ã³ãã©ã€ã¢ã³ã¹
ãããã¬ãŒã·ã§ã³ãã¹ããšãšã¯ã¹ããã€ãéçºã¯ãã·ã¹ãã ææè ããã®æç€ºçãªèš±å¯ãåŸãŠã®ã¿å®è¡ããå¿ èŠããããŸããåžžã«å«ççã¬ã€ãã©ã€ã³ãšæ³çèŠå¶ãéµå®ããŠãã ãããããã«ã¯ä»¥äžãå«ãŸããŸãã
- æžé¢ã«ããåæã®ååŸïŒã·ã¹ãã ããã¹ãããåã«æžé¢ã«ããèš±å¯ã確ä¿ããŸãã
- ãã©ã€ãã·ãŒã®å°éïŒæ©å¯æ å ±ãžã®ã¢ã¯ã»ã¹ãŸãã¯é瀺ãé¿ããŸãã
- 圱é¿ã®æå°åïŒãã¹ãäžã«ãµãŒãã¹ã®äžæãæå°éã«æããããã®æªçœ®ãè¬ããŸãã
- è匱æ§ã®å ±åïŒçºèŠãããè匱æ§ãã·ã¹ãã ææè ã«éããã«é瀺ããŸãã
- æ³åŸã®éµå®ïŒãµã€ããŒã»ãã¥ãªãã£ãšããŒã¿ãã©ã€ãã·ãŒã«é¢ãããã¹ãŠã®é©çšãããæ³åŸããã³èŠå¶ãéµå®ããŸããããã«ã¯ãGDPRãCCPAãããã³ãã®ä»ã®å°åèŠå¶ãå«ãŸããŸãã
çµè«
PythonããŒã¹ã®ãšã¯ã¹ããã€ãéçºãã¬ãŒã ã¯ãŒã¯ã®æ§ç¯ã¯ãå°é£ã§ããããããã®ããåãçµã¿ã§ãããšã¯ã¹ããã€ãéçºã®ååãããæ·±ãçè§£ããã«ã¹ã¿ãã€ãºæ©èœã匷åãã貎éãªåŠç¿çµéšãæäŸããŸãããã®èšäºã§æŠèª¬ãããŠããæé ã«åŸãããšã§ããããã¬ãŒã·ã§ã³ãã¹ããšè匱æ§èª¿æ»ã®ããã®åŒ·åã§æè»ãªããŒã«ãäœæã§ããŸããåžžã«å«ççèæ ®äºé ãšæ³çã³ã³ãã©ã€ã¢ã³ã¹ãåªå ããããšãå¿ããªãã§ãã ããã
ãããªãåŠç¿ãªãœãŒã¹
- The Shellcoder's HandbookïŒãšã¯ã¹ããã€ãéçºæè¡ã«é¢ããåªãããªãœãŒã¹ã
- Practical Malware AnalysisïŒãã«ãŠã§ã¢åæãšãªããŒã¹ãšã³ãžãã¢ãªã³ã°æè¡ã«ã€ããŠèª¬æããŸãã
- ãªã³ã©ã€ã³ã³ãŒã¹ïŒCybraryãOffensive SecurityãSANSã®ãããªãã©ãããã©ãŒã ã¯ããããã¬ãŒã·ã§ã³ãã¹ããšãšã¯ã¹ããã€ãéçºã«é¢ããå æ¬çãªã³ãŒã¹ãæäŸããŠããŸãã
- ã»ãã¥ãªãã£ããã°ãšãã©ãŒã©ã ïŒã»ãã¥ãªãã£ç ç©¶è ããã©ããŒããTwitterãRedditïŒr/netsecãr/reverseengineeringïŒãHacker Newsã®ãããªãã©ãããã©ãŒã ã§è°è«ã«åå ããŠãã ããã
- Capture the FlagïŒCTFïŒã³ã³ããã£ã·ã§ã³ïŒCTFã³ã³ããã£ã·ã§ã³ã«åå ããŠãå®è·µçãªç°å¢ã§ã¹ãã«ããã¹ãããã³åäžãããŸãã